﻿#define _CRT_SECURE_NO_WARNINGS 1

#include <iostream>
using namespace std;
#include <vector>

//int main()
//{
//    int m = 0, n = 0;
//    cin >> m >> n;
//    vector<char> num;
//    num.resize(32, 0);
//    while (m)
//    {
//        m--;
//        int i = 0;
//        num[i]++;
//        while (num[i] >= n)
//        {
//            num[i + 1]++;
//            num[i] = 0;
//            i++;
//        }
//    }
//
//    for (int i = 0; i < num.size(); i++)
//    {
//        if (num[i] > 9)
//        {
//            switch (num[i])
//            {
//            case 10:
//                num[i] = 'A';
//                break;
//            case 11:
//                num[i] = 'B';
//                break;
//            case 12:
//                num[i] = 'C';
//                break;
//            case 13:
//                num[i] = 'D';
//                break;
//            case 14:
//                num[i] = 'E';
//                break;
//            case 15:
//                num[i] = 'F';
//                break;
//            }
//        }
//        else
//        {
//            num[i] += '0';
//        }
//    }
//
//    vector<char>::reverse_iterator it = num.rbegin();
//    while (*it == '0')
//    {
//        ++it;
//    }
//    while (it != num.rend())
//    {
//        printf("%c", *it);
//        ++it;
//    }
//
//    return 0;
//}

//#include <iostream>
//using namespace std;
//#include <vector>
//#include <math.h>
//
//class Is2
//{
//public:
//    Is2(int h = 0, int w = 0)
//        :_h(h), _w(w)
//    {}
//
//    bool operator()(int x, int y)
//    {
//        for (int i = x - 1; i <= x + 1; i++)
//        {
//            for (int j = y - 1; j <= y + 1; j++)
//            {
//                if (i >= 0 && i < _h && j >= 0 && j < _w)
//                {
//                    int n = (x - i) * (x - 1) + (y - j) * (y - j);
//                    if (sqrt(n) == 2)
//                    {
//                        return false;
//                    }
//                }
//            }
//        }
//        return true;
//    }
//private:
//    int _h;
//    int _w;
//};
//
//int main()
//{
//    int h, w;
//    cin >> h >> w;
//    // vector<vector<int>> vv;
//    // vv.reserve(h);
//    // for(auto& v:vv)
//    // {
//    //     v.reserve(w);
//    // }
//
//    int count = 0;
//    Is2 is2(h, w);
//    for (int i = 0; i < h; i++)
//    {
//        for (int j = 0; j < w; j++)
//        {
//            if (is2(i, j)) count++;
//        }
//    }
//
//    cout << count;
//    return 0;
//}

#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>
//int main() {
//    int n = 0;
//    cin >> n;
//    int a = 0;
//    vector<int> a_i;
//    while (cin >> a) {
//        a_i.push_back(a);
//    }
//    sort(a_i.begin(), a_i.end());
//    for (auto e : a_i) {
//        cout << e;
//    }
//
//    int sum = 0;
//    for (int i = a_i.size() - 2; n--; i -= 2) {
//        sum += a_i[i];
//        printf("%d ", a_i[i]);
//        //printf("%d ",a_i[i]);
//    }
//    //printf("\n");
//    printf("%d\n", sum);
//    return 0;
//}
//// 64 位输出请用 printf("%lld")

//class A
//
//{
//
//public:
//
//	void f() { cout << "A::f()" << endl; }
//
//	int a;
//
//};
//
//
//
//class B : public A
//
//{
//
//public:
//
//	void f(int a) { cout << "B::f()" << endl; }
//
//	int a;
//
//};



//class A
//{
//
//public:
//
//  A() { cout << "A::A()" << endl; }
//
//  ~A() { cout << "A::~A()" << endl; }
//
//  int a;
//
//};
//
//
//
//class B : public A
//
//{
//
//public:
//
//	B() { cout << "B::B()" << endl; }
//
//	~B() { cout << "B::~B()" << endl; }
//
//	int b;
//
//};
//
//
//
//void f()
//
//{
//
//	B b;
//
//}

//class A { public: void test(float a) { cout << a; } }; class B :public A { public: void test(int b) { cout << b; } }; void main() { A* a = new A; B* b = new B; a = b; a->test(1.1); }

//class A
//
//{
//
//public:
//
//    virtual void f()
//
//    {
//
//        cout << "A::f()" << endl;
//
//    }
//
//};
//
//class B : public A
//
//{
//
//private:
//
//    virtual void f()
//
//    {
//
//        cout << "B::f()" << endl;
//
//    }
//
//};
//
//int main()
//{
//
//    //A* pa = (A*)new B;
//    A* pa = new B;
//
//    pa->f();
//    return 0;
//}

class A
{

public:

  A() :m_iVal(0) { test(); }

  virtual void func() { std::cout << m_iVal << ' '; }

  void test() { func(); }

public:

  int m_iVal;

};



class B : public A

{

public:

    B() { test(); }

    virtual void func()

    {

        ++m_iVal;

        std::cout << m_iVal << ' ';

    }

};



int main(int argc, char* argv[])

{

    A* p = new B;

    p->test();

    return 0;

}